package showgo.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JDialog;
import javax.swing.JOptionPane;

import showgo.modell.Manager;
import showgo.modell.inszenierung.Darstellerposten;
import showgo.modell.inszenierung.Inszenierung;
import showgo.modell.inszenierung.Nichtdarstellerposten;
import showgo.modell.stamm.Ensemble;
import showgo.modell.stamm.Person;
import showgo.modell.stueck.Rolle;
import showgo.modell.stueck.Stueck;

/**
 * GUI fuer die Verwaltung von Inszenierungen
 * 
 * @author lutz
 * 
 */
public class InszenierungDialog extends JDialog implements ActionListener,
	ItemListener {

    /**
     * 
     */
    private static final long serialVersionUID = -6060596045005879004L;

    private javax.swing.JButton abbrechenButton;
    private javax.swing.JButton beendenButton;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox ensembleComboBox;
    private javax.swing.JLabel gewEnsLabel;
    private javax.swing.JLabel gewStueckLabel;
    private javax.swing.JLabel insBezLabel;
    private javax.swing.JTextField insBezTextField;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox stueckComboBox;
    private javax.swing.JLabel ueberschriftLabel;
    private javax.swing.JButton besetzButton;
    private javax.swing.JLabel darstellerLabel;
    private javax.swing.JLabel darstellerLabel1;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox drittBesetzComboBox;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox drittNichtdComboBox;
    private javax.swing.JLabel drittVorschlagLabel;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox erstBesetzComboBox;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox erstNichtdComboBox;
    private javax.swing.JLabel erstVorschlagLabel;
    private javax.swing.JLabel jLabel1;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox nichtDarstComboBox;
    private javax.swing.JButton nichtdButton;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox rollenComboBox;
    private javax.swing.JLabel rollenLabel;
    private javax.swing.JLabel rollenLabel1;
    private javax.swing.JLabel rollenLabel2;
    private javax.swing.JLabel rollenLabel3;
    private javax.swing.JLabel rollenLabel4;
    private javax.swing.JLabel rollenLabel5;
    private javax.swing.JLabel rollenLabel6;
    private javax.swing.JLabel rollenLabel7;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox zweitBesetzComboBox;
    @SuppressWarnings("rawtypes")
    private javax.swing.JComboBox zweitNichtdComboBox;
    private javax.swing.JLabel zweitVorschlagLabel;
    private javax.swing.JButton stueckButton;
    private javax.swing.JButton ensembleButton;
    private javax.swing.JButton neuNichtdButton;

    private Inszenierung tempInszenierung;

    private String alteBezeichnung;

    public InszenierungDialog(Inszenierung inszenierung) {
	if (inszenierung != null) {
	    this.tempInszenierung = inszenierung.tiefeKopie();
	    this.alteBezeichnung = inszenierung.getInszBezeichnung();
	}

	setModal(true);
	setTitle("ShowGo - Inszenierung");

	initComponents();
	ladeRollenBesetzung();
	ladeRollenVorschlag();
	ladeNichtDarstellerBesetzung();
    }

    @SuppressWarnings({ "rawtypes" })
    private void initComponents() {

	setPreferredSize(new java.awt.Dimension(850, 395));
	// DialogFrame kann nicht maximiert werden
	setResizable(false);

	rollenComboBox = new javax.swing.JComboBox();
	rollenComboBox.addItemListener(this);
	erstBesetzComboBox = new javax.swing.JComboBox();
	erstBesetzComboBox.addItemListener(this);
	zweitBesetzComboBox = new javax.swing.JComboBox();
	zweitBesetzComboBox.addItemListener(this);
	drittBesetzComboBox = new javax.swing.JComboBox();
	drittBesetzComboBox.addItemListener(this);

	nichtDarstComboBox = new javax.swing.JComboBox();
	nichtDarstComboBox.addItemListener(this);
	erstNichtdComboBox = new javax.swing.JComboBox();
	erstNichtdComboBox.addItemListener(this);
	zweitNichtdComboBox = new javax.swing.JComboBox();
	zweitNichtdComboBox.addItemListener(this);
	drittNichtdComboBox = new javax.swing.JComboBox();
	drittNichtdComboBox.addItemListener(this);

	gewStueckLabel = new javax.swing.JLabel();
	ueberschriftLabel = new javax.swing.JLabel();

	insBezTextField = new javax.swing.JTextField();
	insBezTextField.setText(alteBezeichnung);

	insBezLabel = new javax.swing.JLabel();
	gewEnsLabel = new javax.swing.JLabel();

	stueckComboBox = new javax.swing.JComboBox();
	stueckComboBox.setEditable(false);

	gewStueckLabel.setFont(new java.awt.Font("Tahoma", 1, 11));
	gewStueckLabel.setText("gewähltes Stück");

	ueberschriftLabel.setFont(new java.awt.Font("Tahoma", 1, 14));
	ueberschriftLabel.setText("Bearbeiten eienr Inszenierung");

	insBezLabel.setFont(new java.awt.Font("Tahoma", 1, 11));
	insBezLabel.setText("Bezeichnung");

	gewEnsLabel.setFont(new java.awt.Font("Tahoma", 1, 11));
	gewEnsLabel.setText("gewähltes Ensemble");

	ensembleComboBox = new javax.swing.JComboBox();
	ensembleComboBox.setEditable(false);

	beendenButton = new javax.swing.JButton();
	beendenButton.setFont(new java.awt.Font("Tahoma", 1, 12));
	beendenButton.setText("Beenden");
	beendenButton.addActionListener(this);

	abbrechenButton = new javax.swing.JButton();
	abbrechenButton.setFont(new java.awt.Font("Tahoma", 1, 12));
	abbrechenButton.setText("Abbrechen");
	abbrechenButton.addActionListener(this);

	darstellerLabel = new javax.swing.JLabel();
	darstellerLabel.setFont(new java.awt.Font("Tahoma", 1, 12));
	darstellerLabel.setText("Darstellerposten zuweisen:");

	rollenLabel = new javax.swing.JLabel();
	rollenLabel.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel.setText("Rolle");

	rollenLabel1 = new javax.swing.JLabel();
	rollenLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel1.setText("1. Besetzung");

	rollenLabel2 = new javax.swing.JLabel();
	rollenLabel2.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel2.setText("2. Besetzung");

	rollenLabel3 = new javax.swing.JLabel();
	rollenLabel3.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel3.setText("3. Besetzung");

	besetzButton = new javax.swing.JButton();
	besetzButton.setFont(new java.awt.Font("Tahoma", 1, 11));
	besetzButton.setText("übernehmen");
	besetzButton.addActionListener(this);

	jLabel1 = new javax.swing.JLabel();
	jLabel1.setFont(new java.awt.Font("Tahoma", 2, 10));
	jLabel1.setText("Vorschlag:");

	erstVorschlagLabel = new javax.swing.JLabel();
	zweitVorschlagLabel = new javax.swing.JLabel();
	drittVorschlagLabel = new javax.swing.JLabel();
	erstVorschlagLabel.setText("-");
	zweitVorschlagLabel.setText("-");
	drittVorschlagLabel.setText("-");

	darstellerLabel1 = new javax.swing.JLabel();
	darstellerLabel1.setFont(new java.awt.Font("Tahoma", 1, 12));
	darstellerLabel1.setText("Nichtdarstellerposten zuweisen:");

	rollenLabel4 = new javax.swing.JLabel();
	rollenLabel4.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel4.setText("Posten");

	rollenLabel5 = new javax.swing.JLabel();
	rollenLabel5.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel5.setText("1. Besetzung");

	rollenLabel6 = new javax.swing.JLabel();
	rollenLabel6.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel6.setText("2. Besetzung");

	rollenLabel7 = new javax.swing.JLabel();
	rollenLabel7.setFont(new java.awt.Font("Tahoma", 1, 11));
	rollenLabel7.setText("3. Besetzung");

	nichtdButton = new javax.swing.JButton();
	nichtdButton.setFont(new java.awt.Font("Tahoma", 1, 11));
	nichtdButton.setText("übernehmen");
	nichtdButton.addActionListener(this);

	stueckButton = new javax.swing.JButton();
	stueckButton.setFont(new java.awt.Font("Tahoma", 1, 11));
	stueckButton.setText("Bearbeiten");
	stueckButton.addActionListener(this);

	ensembleButton = new javax.swing.JButton();
	ensembleButton.setFont(new java.awt.Font("Tahoma", 1, 11));
	ensembleButton.setText("Bearbeiten");
	ensembleButton.addActionListener(this);

	neuNichtdButton = new javax.swing.JButton();
	neuNichtdButton.setFont(new java.awt.Font("Tahoma", 1, 11));
	neuNichtdButton.setText("Neu");
	neuNichtdButton.addActionListener(this);

	initComboBoxModel();
	setselcetedIndex();

	javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
		getContentPane());
	getContentPane().setLayout(layout);
	layout.setHorizontalGroup(layout
		.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
		.addGroup(
			layout.createSequentialGroup()
				.addComponent(darstellerLabel)
				.addGap(0, 0, Short.MAX_VALUE))
		.addGroup(
			layout.createSequentialGroup()
				.addContainerGap()
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.LEADING)
						.addGroup(
							layout.createSequentialGroup()
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.LEADING)
										.addGroup(
											layout.createSequentialGroup()
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															nichtDarstComboBox,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															110,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															rollenLabel4))
												.addGap(18,
													18,
													18)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															erstNichtdComboBox,
															0,
															javax.swing.GroupLayout.DEFAULT_SIZE,
															Short.MAX_VALUE)
														.addGroup(
															layout.createSequentialGroup()
																.addComponent(
																	rollenLabel5)
																.addGap(0,
																	50,
																	Short.MAX_VALUE)))
												.addPreferredGap(
													javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															zweitNichtdComboBox,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															122,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															rollenLabel6))
												.addGap(10,
													10,
													10)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															rollenLabel7)
														.addComponent(
															drittNichtdComboBox,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															122,
															javax.swing.GroupLayout.PREFERRED_SIZE)))
										.addGroup(
											layout.createSequentialGroup()
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.TRAILING)
														.addComponent(
															jLabel1)
														.addGroup(
															layout.createParallelGroup(
																javax.swing.GroupLayout.Alignment.LEADING)
																.addComponent(
																	rollenComboBox,
																	javax.swing.GroupLayout.PREFERRED_SIZE,
																	110,
																	javax.swing.GroupLayout.PREFERRED_SIZE)
																.addComponent(
																	rollenLabel)))
												.addGap(18,
													18,
													18)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING,
														false)
														.addComponent(
															rollenLabel1)
														.addComponent(
															erstBesetzComboBox,
															0,
															122,
															Short.MAX_VALUE)
														.addComponent(
															erstVorschlagLabel,
															javax.swing.GroupLayout.DEFAULT_SIZE,
															javax.swing.GroupLayout.DEFAULT_SIZE,
															Short.MAX_VALUE))
												.addPreferredGap(
													javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addGroup(
															layout.createSequentialGroup()
																.addGroup(
																	layout.createParallelGroup(
																		javax.swing.GroupLayout.Alignment.LEADING)
																		.addComponent(
																			zweitBesetzComboBox,
																			javax.swing.GroupLayout.PREFERRED_SIZE,
																			122,
																			javax.swing.GroupLayout.PREFERRED_SIZE)
																		.addComponent(
																			rollenLabel2))
																.addPreferredGap(
																	javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
																.addGroup(
																	layout.createParallelGroup(
																		javax.swing.GroupLayout.Alignment.LEADING)
																		.addComponent(
																			rollenLabel3)
																		.addComponent(
																			drittBesetzComboBox,
																			javax.swing.GroupLayout.PREFERRED_SIZE,
																			122,
																			javax.swing.GroupLayout.PREFERRED_SIZE)))
														.addGroup(
															layout.createSequentialGroup()
																.addComponent(
																	zweitVorschlagLabel,
																	javax.swing.GroupLayout.PREFERRED_SIZE,
																	122,
																	javax.swing.GroupLayout.PREFERRED_SIZE)
																.addPreferredGap(
																	javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
																.addComponent(
																	drittVorschlagLabel,
																	javax.swing.GroupLayout.PREFERRED_SIZE,
																	122,
																	javax.swing.GroupLayout.PREFERRED_SIZE)))))
								.addGap(18, 18,
									18)
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.LEADING)
										.addGroup(
											layout.createSequentialGroup()
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															nichtdButton)
														.addComponent(
															neuNichtdButton))
												.addPreferredGap(
													javax.swing.LayoutStyle.ComponentPlacement.RELATED,
													64,
													Short.MAX_VALUE)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															beendenButton,
															javax.swing.GroupLayout.Alignment.TRAILING,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															125,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															abbrechenButton,
															javax.swing.GroupLayout.Alignment.TRAILING,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															125,
															javax.swing.GroupLayout.PREFERRED_SIZE)))
										.addGroup(
											layout.createSequentialGroup()
												.addComponent(
													besetzButton)
												.addGap(0,
													0,
													Short.MAX_VALUE))))
						.addGroup(
							layout.createSequentialGroup()
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.LEADING)
										.addComponent(
											darstellerLabel1)
										.addComponent(
											ueberschriftLabel)
										.addGroup(
											layout.createSequentialGroup()
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															insBezTextField,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															140,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															insBezLabel))
												.addPreferredGap(
													javax.swing.LayoutStyle.ComponentPlacement.RELATED)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															stueckComboBox,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															140,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															gewStueckLabel)
														.addComponent(
															stueckButton))
												.addPreferredGap(
													javax.swing.LayoutStyle.ComponentPlacement.RELATED)
												.addGroup(
													layout.createParallelGroup(
														javax.swing.GroupLayout.Alignment.LEADING)
														.addComponent(
															gewEnsLabel)
														.addComponent(
															ensembleComboBox,
															javax.swing.GroupLayout.PREFERRED_SIZE,
															140,
															javax.swing.GroupLayout.PREFERRED_SIZE)
														.addComponent(
															ensembleButton))))
								.addGap(0,
									0,
									Short.MAX_VALUE)))
				.addContainerGap()));
	layout.setVerticalGroup(layout
		.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
		.addGroup(
			layout.createSequentialGroup()
				.addContainerGap()
				.addComponent(ueberschriftLabel)
				.addGap(34, 34, 34)
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.BASELINE)
						.addComponent(insBezLabel)
						.addComponent(gewStueckLabel)
						.addComponent(gewEnsLabel))
				.addPreferredGap(
					javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.BASELINE)
						.addComponent(
							insBezTextField,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(
							stueckComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(
							ensembleComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(
					javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.BASELINE)
						.addComponent(stueckButton)
						.addComponent(ensembleButton))
				.addGap(18, 18, 18)
				.addComponent(darstellerLabel)
				.addPreferredGap(
					javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.BASELINE)
						.addComponent(rollenLabel)
						.addComponent(rollenLabel1)
						.addComponent(rollenLabel2)
						.addComponent(rollenLabel3))
				.addPreferredGap(
					javax.swing.LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.BASELINE)
						.addComponent(
							rollenComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(
							erstBesetzComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(
							zweitBesetzComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(
							drittBesetzComboBox,
							javax.swing.GroupLayout.PREFERRED_SIZE,
							javax.swing.GroupLayout.DEFAULT_SIZE,
							javax.swing.GroupLayout.PREFERRED_SIZE)
						.addComponent(besetzButton))
				.addGroup(
					layout.createParallelGroup(
						javax.swing.GroupLayout.Alignment.LEADING)
						.addGroup(
							layout.createSequentialGroup()
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.BASELINE)
										.addComponent(
											jLabel1)
										.addComponent(
											erstVorschlagLabel)
										.addComponent(
											zweitVorschlagLabel)
										.addComponent(
											drittVorschlagLabel))
								.addGap(18, 18,
									18)
								.addComponent(
									darstellerLabel1)
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.BASELINE)
										.addComponent(
											rollenLabel4)
										.addComponent(
											rollenLabel5)
										.addComponent(
											rollenLabel6)
										.addComponent(
											rollenLabel7))
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addGroup(
									layout.createParallelGroup(
										javax.swing.GroupLayout.Alignment.BASELINE)
										.addComponent(
											nichtDarstComboBox,
											javax.swing.GroupLayout.PREFERRED_SIZE,
											javax.swing.GroupLayout.DEFAULT_SIZE,
											javax.swing.GroupLayout.PREFERRED_SIZE)
										.addComponent(
											erstNichtdComboBox,
											javax.swing.GroupLayout.PREFERRED_SIZE,
											javax.swing.GroupLayout.DEFAULT_SIZE,
											javax.swing.GroupLayout.PREFERRED_SIZE)
										.addComponent(
											zweitNichtdComboBox,
											javax.swing.GroupLayout.PREFERRED_SIZE,
											javax.swing.GroupLayout.DEFAULT_SIZE,
											javax.swing.GroupLayout.PREFERRED_SIZE)
										.addComponent(
											drittNichtdComboBox,
											javax.swing.GroupLayout.PREFERRED_SIZE,
											javax.swing.GroupLayout.DEFAULT_SIZE,
											javax.swing.GroupLayout.PREFERRED_SIZE)
										.addComponent(
											nichtdButton))
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addComponent(
									neuNichtdButton)
								.addContainerGap(
									46,
									Short.MAX_VALUE))
						.addGroup(
							javax.swing.GroupLayout.Alignment.TRAILING,
							layout.createSequentialGroup()
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED,
									javax.swing.GroupLayout.DEFAULT_SIZE,
									Short.MAX_VALUE)
								.addComponent(
									abbrechenButton,
									javax.swing.GroupLayout.PREFERRED_SIZE,
									50,
									javax.swing.GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(
									javax.swing.LayoutStyle.ComponentPlacement.RELATED)
								.addComponent(
									beendenButton,
									javax.swing.GroupLayout.PREFERRED_SIZE,
									50,
									javax.swing.GroupLayout.PREFERRED_SIZE)
								.addContainerGap()))));

	pack();
    }

    /**
     * Diese Methode initialisiert alle Comboboxen mit den Daten der
     * Inszenierung;
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void initComboBoxModel() {
	// RollenComboBox mit den Rollen fuellen
	DefaultComboBoxModel rollen = new DefaultComboBoxModel();
	for (Rolle r : tempInszenierung.getStueck().getRollen()) {
	    rollen.addElement(r.getRollenName());
	}
	rollenComboBox.setModel(rollen);

	// Nichtdarsteller in ComboBox packen
	DefaultComboBoxModel nichtDarstellerPosten = new DefaultComboBoxModel();
	for (String s : Manager.getInstance().getNichtDarstellerPosten()) {
	    nichtDarstellerPosten.addElement(s);
	}
	nichtDarstComboBox.setModel(nichtDarstellerPosten);

	// Personen in die ComboBoxen fuer die Erstbestzung laden
	DefaultComboBoxModel personen = new DefaultComboBoxModel();
	for (Person p : tempInszenierung.getEnsemble().getGruppe()) {
	    personen.addElement(p.getName());
	}

	erstBesetzComboBox.setModel(personen);

	DefaultComboBoxModel personen2 = new DefaultComboBoxModel();
	for (Person p : Manager.getInstance().getPersonen()) {
	    personen2.addElement(p.getName());
	}
	erstNichtdComboBox.setModel(personen2);

	setzeZweitBestzungComboBoxModel();
	setzeZweitBestzungNichtComboBoxModel();

	DefaultComboBoxModel ensemble = new DefaultComboBoxModel();
	for (Ensemble e : Manager.getInstance().getEnsembles()) {
	    ensemble.addElement(e.getName());
	}
	if (ensemble.getSize() > 0) {
	    ensembleComboBox.setModel(ensemble);
	}

	DefaultComboBoxModel stuecke = new DefaultComboBoxModel();
	for (Stueck s : Manager.getInstance().getStuecke()) {
	    stuecke.addElement(s.getName());
	}
	if (stuecke.getSize() > 0) {
	    stueckComboBox.setModel(stuecke);
	}
	ladeRollenBesetzung();
	ladeNichtDarstellerBesetzung();
    }

    /**
     * Methode, die ComboBox fuer die Zweitbesetzung mit Werten fuellen soll;
     * dabei darf eine Person nicht doppelt gewaehlt werden koennen;
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void setzeZweitBestzungNichtComboBoxModel() {
	int nichtDarsteller1 = erstNichtdComboBox.getSelectedIndex();
	DefaultComboBoxModel personenNicht2 = new DefaultComboBoxModel();
	personenNicht2.addElement("ohne");
	for (int i = 0; i < Manager.getInstance().getPersonen().size(); i++) {
	    if (i != nichtDarsteller1) {
		personenNicht2.addElement(Manager.getInstance().getPersonen()
			.get(i).getName());
	    }
	}
	zweitNichtdComboBox.setModel(personenNicht2);
	setzeDrittBesetzungNichtComboBoxModel();
    }

    /**
     * analog zur Methode setzeZweitBestzungComboBox
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void setzeDrittBesetzungNichtComboBoxModel() {
	DefaultComboBoxModel personenNicht3 = new DefaultComboBoxModel();
	personenNicht3.addElement("ohne");
	String comboBoxNicht1 = erstNichtdComboBox.getSelectedItem().toString();
	String comboBoxNicht2 = zweitNichtdComboBox.getSelectedItem()
		.toString();
	for (int i = 0; i < Manager.getInstance().getPersonen().size(); i++) {
	    if (!Manager.getInstance().getPersonen().get(i).getName()
		    .equals(comboBoxNicht1)
		    && !Manager.getInstance().getPersonen().get(i).getName()
			    .equals(comboBoxNicht2)) {
		personenNicht3.addElement(Manager.getInstance().getPersonen()
			.get(i).getName());
	    }
	}
	drittNichtdComboBox.setModel(personenNicht3);
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void setzeZweitBestzungComboBoxModel() {
	// Methode, die ComboBox fuer die Zweitbesetzung
	// mit Werten fuellen soll; dabei darf eine Person nicht doppelt
	// gewaehlt werden koennen;
	int darsteller1 = erstBesetzComboBox.getSelectedIndex();
	DefaultComboBoxModel personen2 = new DefaultComboBoxModel();
	personen2.addElement("ohne");
	for (int i = 0; i < Manager.getInstance().getPersonen().size(); i++) {
	    if (i != darsteller1) {
		personen2.addElement(Manager.getInstance().getPersonen().get(i)
			.getName());
	    }
	}
	zweitBesetzComboBox.setModel(personen2);
	setzeDrittBesetzungComboBoxModel();
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private void setzeDrittBesetzungComboBoxModel() {
	// analog zur Methode setzeZweitBestzungComboBox
	DefaultComboBoxModel personen3 = new DefaultComboBoxModel();
	personen3.addElement("ohne");
	if (erstBesetzComboBox.getSelectedIndex() > -1
		&& zweitBesetzComboBox.getSelectedIndex() > -1) {
	    String comboBox1 = erstBesetzComboBox.getSelectedItem().toString();
	    String comboBox2 = zweitBesetzComboBox.getSelectedItem().toString();
	    for (int i = 0; i < Manager.getInstance().getPersonen().size(); i++) {
		if (!Manager.getInstance().getPersonen().get(i).getName()
			.equals(comboBox1)
			&& !Manager.getInstance().getPersonen().get(i)
				.getName().equals(comboBox2)) {
		    personen3.addElement(Manager.getInstance().getPersonen()
			    .get(i).getName());
		}
	    }
	}
	drittBesetzComboBox.setModel(personen3);
    }

    private void setselcetedIndex() {
	// wenn die uebergebene Inszenierung nicht neu ist,
	// dann sollen die beiden ComboBoxen gleich die entsprechenden Werte
	// anzeigen
	if (!tempInszenierung.getInszBezeichnung().equals("neue Inszenierung")) {
	    for (int i = 0; i < stueckComboBox.getModel().getSize(); i++) {
		if (stueckComboBox.getModel().getElementAt(i).toString()
			.equals(tempInszenierung.getStueck().getName())) {
		    stueckComboBox.setSelectedIndex(i);
		}
	    }
	    for (int i = 0; i < ensembleComboBox.getModel().getSize(); i++) {
		if (ensembleComboBox.getModel().getElementAt(i).toString()
			.equals(tempInszenierung.getEnsemble().getName())) {
		    ensembleComboBox.setSelectedIndex(i);
		}
	    }
	}
    }

    @SuppressWarnings("unused")
    private String[] getEnsembleBezeichnung() {
	if (!Manager.getInstance().getEnsembles().isEmpty()) {
	    String[] namen = new String[Manager.getInstance().getEnsembles()
		    .size()];
	    int counter = 0;
	    for (int i = 0; i < Manager.getInstance().getEnsembles().size(); i++) {
		namen[counter] = Manager.getInstance().getEnsembles().get(i)
			.getName();
		counter++;
	    }
	    return namen;
	}
	return new String[0];
    }

    @SuppressWarnings("unused")
    private String[] getStueckTitel() {
	// nur Kopien von Stuecken anzeigen
	if (!Manager.getInstance().getStuecke().isEmpty()) {
	    List<String> temp = new ArrayList<String>();
	    for (int i = 0; i < Manager.getInstance().getStuecke().size(); i++) {
		if (Manager.getInstance().getStuecke().get(i).getName()
			.contains("Kopie")) {
		    temp.add(Manager.getInstance().getStuecke().get(i)
			    .getName());
		}
	    }
	    String[] titel = new String[temp.size()];
	    for (int i = 0; i < temp.size(); i++) {
		titel[i] = temp.get(i);
	    }
	    return titel;
	}
	return new String[0];
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
	if (e.getSource() == erstBesetzComboBox) {
	    if (erstBesetzComboBox.getSelectedIndex() > -1) {
		setzeZweitBestzungComboBoxModel();
	    }
	} else if (e.getSource() == erstNichtdComboBox) {
	    if (erstNichtdComboBox.getSelectedIndex() > -1) {
		setzeZweitBestzungNichtComboBoxModel();
	    }
	} else if (e.getSource() == rollenComboBox) {
	    if (rollenComboBox.getSelectedIndex() > -1) {
		ladeRollenBesetzung();
		ladeRollenVorschlag();
	    }
	} else if (e.getSource() == zweitBesetzComboBox) {
	    if (zweitBesetzComboBox.getSelectedIndex() > -1) {
		setzeDrittBesetzungComboBoxModel();
	    }
	} else if (e.getSource() == zweitNichtdComboBox) {
	    if (zweitNichtdComboBox.getSelectedIndex() > -1) {
		setzeDrittBesetzungNichtComboBoxModel();
	    }
	} else if (e.getSource() == nichtDarstComboBox) {
	    if (nichtDarstComboBox.getSelectedIndex() > -1) {
		ladeNichtDarstellerBesetzung();
	    }
	} else if (e.getSource() == ensembleComboBox
		&& ensembleComboBox.getSelectedIndex() > -1) {
	    String bez = ensembleComboBox.getSelectedItem().toString();
	    for (Ensemble ens : Manager.getInstance().getEnsembles()) {
		if (ens.getName().equals(bez)) {
		    tempInszenierung.setEnsemble(ens);
		}
	    }
	    initComboBoxModel();
	} else if (e.getSource() == stueckComboBox
		&& stueckComboBox.getSelectedIndex() > -1) {
	    // Stueck setzen
	    String titel = stueckComboBox.getSelectedItem().toString();
	    for (Stueck s : Manager.getInstance().getStuecke()) {
		if (s.getName().equals(titel)) {
		    tempInszenierung.setStueck(s);
		}
	    }
	    initComboBoxModel();
	}
    }

    private void ladeRollenVorschlag() {
	erstVorschlagLabel.setText("-");
	zweitVorschlagLabel.setText("-");
	drittVorschlagLabel.setText("-");

	// Anhand der Eigenschaften der gewaehlten Rolle eine Besetzung
	// "berechnen" und die entsprechenden jLabels- Texte setzen
	// "berechnen" und die entsprechenden jLabels- Texte setzen
	Rolle rolle = null;
	for (Rolle r : tempInszenierung.getStueck().getRollen()) {
	    if (r.getRollenName().equals(
		    rollenComboBox.getSelectedItem().toString())) {
		rolle = r;
	    }
	}

	// das wird die Liste mit den in Frage kommenden Personen;
	List<Person> besetzung = new ArrayList<Person>();
	for (Person p : tempInszenierung.getEnsemble().getGruppe()) {
	    if (p.getGeschlecht().equals(rolle.getGeschlecht())) {
		if (p.getWortzahlMerken() > rolle.getTextMenge()
			|| Math.abs(p.getWortzahlMerken()
				- rolle.getTextMenge()) < 50) {
		    if (Math.abs(p.berechneAlter() - rolle.getAlter()) < 25) {
			besetzung.add(p);
		    }
		}
	    }
	}

	if (besetzung.size() == 1) {
	    erstVorschlagLabel.setText(besetzung.get(0).getName());
	} else if (besetzung.size() == 2) {
	    erstVorschlagLabel.setText(besetzung.get(0).getName());
	    zweitVorschlagLabel.setText(besetzung.get(1).getName());
	} else if (besetzung.size() > 2) {
	    erstVorschlagLabel.setText(besetzung.get(0).getName());
	    zweitVorschlagLabel.setText(besetzung.get(1).getName());
	    drittVorschlagLabel.setText(besetzung.get(2).getName());
	}

    }

    private void ladeRollenBesetzung() {
	// zur gewaehlten Rolle die gespeicherte Besetzung laden
	if (!tempInszenierung.getDarstellerPosten().isEmpty()) {
	    String rollenName = rollenComboBox.getSelectedItem().toString();
	    List<Person> besetzung = new ArrayList<Person>();
	    // Besetzung fuer diese Rolle laden
	    for (Darstellerposten d : tempInszenierung.getDarstellerPosten()) {
		if (d.getRolle().getRollenName().equals(rollenName)) {
		    besetzung = d.getBesetzung();
		}
	    }

	    // Erstbesetzung laden
	    if (besetzung.size() > 0) {
		erstBesetzComboBox.setSelectedItem(besetzung.get(0).getName());
	    }

	    // Zweitbesetzung laden
	    if (besetzung.size() > 1) {
		zweitBesetzComboBox.setSelectedItem(besetzung.get(1).getName());
	    } else {
		zweitBesetzComboBox.setSelectedItem("ohne");
	    }

	    // Drittbesetzung laden
	    if (besetzung.size() == 3) {
		drittBesetzComboBox.setSelectedItem(besetzung.get(2).getName());
	    } else {
		drittBesetzComboBox.setSelectedItem("ohne");
	    }
	}
    }

    private void ladeNichtDarstellerBesetzung() {
	// analgo zu ladeRollenBesetzung()
	if (!tempInszenierung.getNichtDarPosten().isEmpty()) {
	    String posten = nichtDarstComboBox.getSelectedItem().toString();
	    List<Person> besetzung = new ArrayList<Person>();
	    for (Nichtdarstellerposten n : tempInszenierung.getNichtDarPosten()) {
		if (n.getBezeichnung().equals(posten)) {
		    besetzung = n.getBesetzung();
		}
	    }
	    // Erstbesetzung laden
	    if (besetzung.size() > 0) {
		erstNichtdComboBox.setSelectedItem(besetzung.get(0).getName());
	    }

	    // Zweitbesetzung laden
	    if (besetzung.size() > 1) {
		zweitNichtdComboBox.setSelectedItem(besetzung.get(1).getName());
	    } else {
		zweitNichtdComboBox.setSelectedItem("ohne");
	    }

	    // Drittbesetzung laden
	    if (besetzung.size() == 3) {
		drittNichtdComboBox.setSelectedItem(besetzung.get(2).getName());
	    } else {
		drittNichtdComboBox.setSelectedItem("ohne");
	    }
	}
    }

    @Override
    public void actionPerformed(ActionEvent e) {
	if (e.getSource() == abbrechenButton) {
	    int ret = JOptionPane.showConfirmDialog(null,
		    "Wollen Sie die Änderungen verwerfen?",
		    "Sitzung Abbrechen!", JOptionPane.YES_NO_OPTION);
	    if (ret == JOptionPane.YES_OPTION) {
		dispose();
	    }
	} else if (e.getSource() == beendenButton) {
	    if (insBezTextField.getText().isEmpty()) {
		JOptionPane
			.showMessageDialog(null,
				"Bitte erst eine Bezeichnung für die Inszenierung eingeben!");
	    } else {
		tempInszenierung.setInszBezeichnung(insBezTextField.getText());
		// das gewaehlte Stueck und Ensemble setzen
		if (stueckComboBox.getSelectedIndex() > -1) {
		    String stueckTitel = stueckComboBox.getSelectedItem()
			    .toString();
		    for (int i = 0; i < Manager.getInstance().getStuecke()
			    .size(); i++) {
			if (Manager.getInstance().getStuecke().get(i).getName()
				.equals(stueckTitel)) {
			    tempInszenierung.setStueck(Manager.getInstance()
				    .getStuecke().get(i));
			}
		    }
		}
		if (ensembleComboBox.getSelectedIndex() > -1) {
		    String ensembleName = ensembleComboBox.getSelectedItem()
			    .toString();
		    for (int i = 0; i < Manager.getInstance().getEnsembles()
			    .size(); i++) {
			if (Manager.getInstance().getEnsembles().get(i)
				.getName().equals(ensembleName)) {
			    tempInszenierung.setEnsemble(Manager.getInstance()
				    .getEnsembles().get(i));
			}
		    }
		}

		Manager.getInstance().entferneInszenierung(alteBezeichnung);
		Manager.getInstance().fuegeInszenierungHinzu(
			tempInszenierung.tiefeKopie());
		Manager.getInstance().fireListChanged();
		dispose();
	    }
	} else if (e.getSource() == besetzButton) {
	    speichereDarstellerPosten();
	} else if (e.getSource() == nichtdButton) {
	    speichereNichtdarstellerPosten();
	} else if (e.getSource() == stueckButton) {
	    oeffneStueckDialog();
	} else if (e.getSource() == ensembleButton) {
	    oeffneEnsembleDialog();
	}else if(e.getSource()==neuNichtdButton){
	    fuegeNeueNichtdarstellerPostenEin();
	}
    }

    private void fuegeNeueNichtdarstellerPostenEin() {
	final NichtdarstellerpostenDialog dialog=new NichtdarstellerpostenDialog();
	dialog.setModal(true);
	dialog.setLocationRelativeTo(null);
	dialog.setVisible(true);
	
	initComboBoxModel();
    }

    private void oeffneEnsembleDialog() {
	if (stueckComboBox.getSelectedIndex() > -1) {

	    // das gewaehlte Ensemble laden
	    for (Ensemble e : Manager.getInstance().getEnsembles()) {
		if (e.getName().equals(
			ensembleComboBox.getSelectedItem().toString())) {
		    final EnsembleDialog ensembleDialog = new EnsembleDialog(e);
		    ensembleDialog.setModal(true);
		    ensembleDialog.setLocationRelativeTo(null);
		    ensembleDialog.setVisible(true);
		}
	    }
	}

    }

    /**
     * Diese Methode oeffnet den Dialog zum Bearbeiten des Stuecks;
     */
    private void oeffneStueckDialog() {
	if (stueckComboBox.getSelectedIndex() > -1) {

	    // das gewaehlte Stueck laden
	    for (Stueck s : Manager.getInstance().getStuecke()) {
		if (s.getName().equals(
			stueckComboBox.getSelectedItem().toString())) {
		    final StueckDialog stueckDialog = new StueckDialog(s);
		    stueckDialog.setModal(true);
		    stueckDialog.setLocationRelativeTo(null);
		    stueckDialog.setVisible(true);
		}
	    }
	}
    }

    /**
     * Diese Methode speichert die Besetzung zum dargestllten Nichtdarsteller;
     */
    private void speichereNichtdarstellerPosten() {
	// analog zu speichereDarstellerPosten();
	String bezeichnung = nichtDarstComboBox.getSelectedItem().toString();

	for (Nichtdarstellerposten n : tempInszenierung.getNichtDarPosten()) {
	    if (n.getBezeichnung().equals(bezeichnung)) {
		tempInszenierung.getNichtDarPosten().remove(n);
		break;
	    }
	}

	List<Person> besetzung = new ArrayList<Person>();
	// Erstbesetzung laden
	besetzung.add(Manager.getInstance().getPersonFromString(
		erstNichtdComboBox.getSelectedItem().toString()));
	// Zweitbesetzung laden
	if (!zweitNichtdComboBox.getSelectedItem().toString().equals("ohne")) {
	    besetzung.add(Manager.getInstance().getPersonFromString(
		    zweitNichtdComboBox.getSelectedItem().toString()));
	}

	// Drittbesetzung laden
	if (!drittNichtdComboBox.getSelectedItem().toString().equals("ohne")) {
	    besetzung.add(Manager.getInstance().getPersonFromString(
		    drittNichtdComboBox.getSelectedItem().toString()));
	}

	tempInszenierung.getNichtDarPosten().add(
		new Nichtdarstellerposten(bezeichnung, besetzung));
    }

    /**
     * Diese Methode setzt die gewaehlte Besetzung zur dargestellten Rolle;
     */
    private void speichereDarstellerPosten() {
	String rollenName = rollenComboBox.getSelectedItem().toString();

	// erst Test, ob zu der Rolle schon eine Besetzung vorliegt;
	for (Darstellerposten d : tempInszenierung.getDarstellerPosten()) {
	    if (d.getRolle().getRollenName().equals(rollenName)) {
		tempInszenierung.getDarstellerPosten().remove(d);
		break;
	    }
	}

	Rolle rolle = null;
	List<Person> besetzung = new ArrayList<Person>();
	for (Rolle r : tempInszenierung.getStueck().getRollen()) {
	    if (r.getRollenName().equals(rollenName)) {
		rolle = r;
	    }
	}

	// Erstbesetzung setzen
	besetzung.add(Manager.getInstance().getPersonFromString(
		erstBesetzComboBox.getSelectedItem().toString()));

	// Zweitbesetzung setzen
	if (!zweitBesetzComboBox.getSelectedItem().toString().equals("ohne")) {
	    besetzung.add(Manager.getInstance().getPersonFromString(
		    zweitBesetzComboBox.getSelectedItem().toString()));
	}

	// Drittbesetzung setzen
	if (!drittBesetzComboBox.getSelectedItem().toString().equals("ohne")) {
	    besetzung.add(Manager.getInstance().getPersonFromString(
		    drittBesetzComboBox.getSelectedItem().toString()));
	}

	tempInszenierung.getDarstellerPosten().add(
		new Darstellerposten(rolle, besetzung));
    }

}
